Hi Olix,
es ist nicht richtig, ein Maschinenprogramm über BRK zu beenden. BRK springt nicht zurück sondern hört an der Stelle einfach auf und löst einen Softwareinterrupt aus.
RTS ist grundsätzlich richtig. Eigentlich finde ich, daß der Befehl RFS heißen müßte, denn es soll ja "Return From Subroutine" heißen. Aber man könnte es ja "Return To Subroutine-Call" nennen 🙂
Wenn Du also vom DOS aus folgendes Programm aufrufst:
LDA #$01
TAX
INX
TXA
RTS
kommst Du an die Stelle zurück, wo Du herkommst. Bei einem CLI-DOS sicherlich die Eingabezeile.
Wenn das Programm so aussieht:
LDA #$01
TAX
INX
TXA
JMP (DOSINI)
kommst Du auch ins DOS zurück. Ich müßte jetzt ausprobieren, ob bei einem DOS mit Menü dadurch das Menü neu geladen wird, weiß ich halt gerade nicht.
Was ich auch überperprüfen müßte wäre ob der Prozessorstapel bei diesem Rücksprung (der eigentlich keiner ist) aufgeräumt ist. Es könnte nämlich sein, daß Du zwar wieder im DOS landest, aber da Du nicht zurückgesprungen bist könnte die Rücksprungadresse noch auf dem Prozessorstapel liegen. Dann würde der Stapel mit jedem Programmaufruf um 2 Byte wachsen bis er überläuft. Es kann aber auch sein, daß die INI-Routine des DOS den Stapel zurücksetzt. Dann wäre das immer noch ein Fehler, aber ohne Auswirkung.
Ferner könntest Du auf die Idee kommen, daß es nicht gut ist, wenn Durch Dein Programm die Werte von A, X und Y verändert werden. Das DOS muß ja damit klar kommen, daß da plötzlich was anderes drin steht (ich hatte noch keinen Fall, wo es das nicht tut, soll nur als Beispiel dienen). Man könnte die Werte retten, wie man das bei einem Interrupt machen muß. Dann sieht das so aus:
PHA ;retten
TXA
PHA
TYA
PHA
LDA #$01 ;programm
TAX
INX
TXA
PLA ;wiederherstellen
TAY
PLA
TAX
PLA
RTS
Wenn Du da mit PHA nicht genauso viel auf den Stapel schiebst wie Du mit PLA wieder herunter nimmst dann knallt es beim RTS richtig.
BRK nimmt übrigens die Rücksprungadresse nicht vom Stapel.
Empfohlenes Buch: SYBEX: Programmierung des 6502 (Rodnay Zaks)
CU, Erhard
Jede Info, die zu Hause auf meinem Rechner liegt habe ich unterwegs nicht verfügbar. Jede Info, die im Netz liegt finde ich nicht wieder, wenn ich sie benötige.